package com.oauth.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * 单点登录的三种常见方式
 * 1.session广播机制实现
 * 在一个集群中的一个模块登录后，然后把这个session复制n份，发送到这个集群的其他模块中，就实现了一处登录，处处可用，但缺点是耗费比较大，不推荐使用
 *
 * 2.使用cookie+redis实现
 * （1）redis：在key：生成唯一随机值（ip、用户id等等）  ，在value：用户数据
 * （2）cookie：把redis里面生成key值放到cookie里面(cookie为客户端技术，保存在浏览器中，每次发送请求，带着cookie值进行发送)
 *
 * 3使用token实现(推荐使用)
 *  (1)登录后生成token
 *  (2)访问别的系统，如果可以根据token获取用户信息，不需要再登录
 */
@RestController
public class TestSessionController {

    @GetMapping("addCookie")
    public String addCookie(HttpServletResponse response, HttpServletRequest request){
        Cookie cookie =new Cookie("mySessionId","123456");
        // 一天的有效期
        cookie.setMaxAge(60*60*24);
        // 添加cookie,用户下一次请求，会带上该cookie
        response.addCookie(cookie);
        HttpSession session = request.getSession();
        session.setAttribute("123456","666666");
        return "success";
    }

    @GetMapping("getSessionValue")
    public String getSessionValue(HttpServletRequest request){
        HttpSession session = request.getSession();
        Object attribute = session.getAttribute("123456");
        System.out.println(attribute);
        return "success";
    }
}
